package com.shujia.wyh.day08;

/*
    定义一个学生类：
        成员变量：name,age
        成员方法：show()方法

    我们在使用对象给成员变量进行过程中发现一个问题：
        通过对象给成员变量进行赋值的时候，可以赋值一些与现实生活冲突的数据（非法数据）
        但是这样的数据是不合理。
        我们应该在赋值之前，要做一次数据的校验，也就是对数据进行一次判断。
        问题来了，我们应该在哪里定义判断呢？
        StudentDemo2类是一个测试类，一般情况下，测试类只能创建对象并使用对象，调用方法或者是访问成员变量。

        所以，我们的判断逻辑应该定义在Student2类中。
        因为，我们在定义成员变量的时候，不能加上数据判断，
        又因为数据判断的时候，加的是一些逻辑逻辑，不是一两句能够搞定的
        逻辑判断语句应该定义在方法中，所以，我们最后区添加判断的时候，应该在Student2类中提供一个方法来进行数据校验。

    虽然我们添加了判断条件来进数据校验，但是呢，我们偏偏不用这个方法来赋值，所以还是可以赋值一些非法的数据
    这样的话我们给出的方法就不起作用了，或者说意义不大。
    我们应该要求调用者必须使用我们给出的方法来进行数据的赋值，而不能通过直接访问成员变量来进行赋值
    怎么才强制要求调用使用方法进行赋值呢？
    java针对这种情况，提供了一个关键字给我们使用：private

    private:私有的。可以修饰成员变量和成员方法。
        注意：被private修饰的成员变量或者成员方法，只能在本类中访问，其他类中无法访问。


    其实这个案例说到现在，讲解的其实就是一个思想：封装
    封装：其实就是指隐藏对象的属性和相关实现细节，仅仅对外提供公共的访问方式。




 */
class Student2 {
    //定义成员变量
    //姓名
    String name;
    //年龄
    private int age;

    public void setAge(int a){
        if(a>0 & a<120){
            age = a;
        }else {
            System.out.println("赋值的年龄有问题，无法赋值");
        }
    }

    public void show() {
        System.out.println("姓名：" + name);
        System.out.println("年龄：" + age);
    }
}

public class StudentDemo2 {
    public static void main(String[] args) {
        //创建学生对象
        Student2 s = new Student2();
        s.show();
        System.out.println("=========================");
        //给学生对象s的成员变量进行赋值操作
        s.name = "李毅";
//        s.age = 18;
//        s.age = 1000;
//        s.age = 1000; //由于我们在Student2类中的name前面加了private关键字修饰，不可以直接访问成员变量，要想赋值，就
        //只能通过我们提供的公共的方法来进行赋值

        s.setAge(1000);
        s.show();


    }
}
